<?php namespace Common\Model;
use Hdphp\Model\Model;
use Common\Model\Shop_attribute;
use Common\Model\Category;
use Common\Model\Shop_detailed;
class Shop extends Model{
	protected $table='shop';
	//	自动验证
	protected $validate=array(
		array('sname','required','商品名称不能为空',3,3),
		array('number','required','货号不能为空',3,3),
		array('company','required','单位不能为空',3,3),
		array('market','required','市场价不能为空',3,3),
		array('shop','required','商城价格不能为空',3,3),
		array('stock','required','库存不能为空',3,3)

	);
//	自动完成
	protected $auto = array(
		//array(字段名,处理方法,方法类型,验证条件,处理时间) 

		array('listGraph','getThumb','method',3,3)
	); 
	public function getThumb(){

		//接收编辑页面隐藏域的旧图片的值	
		$oldImg = Q('post.listGraph');
		
		//如果没上传图片，那么返回空字符串存入数据库
		if($_FILES['listGraph']['error'] == 4){
			//如果隐藏域有旧图片地址那么就是修改
			if($oldImg){
				//直接返回旧图片地址
				return $oldImg;
			}
			return '';
		}
		//上传处理
		$files = Upload::type('jpg,jpeg,png,gif')->make();
		//如果上传成功，返回上传地址给数据
		if($files){
			//如果用户在编辑和添加的时候有图片上传
			//如果有旧图片，证明是编辑，删除旧图片
			if($oldImg){
				//删除缩略图
				unlink($oldImg);
				//删除原图
				$path = str_replace('_listGraph', '', $oldImg);
				unlink($path);
			}
			//缩略
			//Upload/31341470031983_listGraph.png
			$thumbImg = str_replace(".{$files[0]['ext']}", "_listGraph.{$files[0]['ext']}", $files[0]['path']);
			$img = Image::thumb($files[0]['path'],$thumbImg,224,168,1);
			return $img;
		}
		//如果上传失败
		//把上传错误压入到当前模型的错误属性，这样外面的控制器就可以用getError来调取了
		$this->error = Upload::getError();
	}	
	public function store(){
		if(!$this->create()) return false;
		$cid=$this->data['category_cid'];
		$CategoryModel=new Category;
		$CateData=$CategoryModel->where("cid={$cid}")->find();
		$this->data['type_tid']=$CateData['type_tid'];

		//添加商品第一张表，返回自增id
		$sid = $this->add();
//		添加商品详细表
		$Shop_detailedModel=new Shop_detailed;
		$Shop_detailedModel->create();
		$Shop_detailedModel->data['shop_sid']=$sid;
		$Shop_detailedModel->add();
		//添加商品属性表
		$Shop_attributeModel = new Shop_attribute;
		//属性添加
		foreach (Q('post.attr') as $attribute_aid => $v) {
			if($v){
				$data = array(
					'shop_attributecol'=>$v,
					'attribute_aid'=>$attribute_aid,
					'shop_id'=>$sid
				);
				$Shop_attributeModel->add($data);
			}
		}
		//规格添加
		$spec = Q('post.spec');
		if($spec){
			$value = $spec['value'];
			foreach ($value as $attribute_aid => $v) {
				foreach ($v as $kk => $vv) {
					$data = array(
						'shop_attributecol'=>$vv,
						'attribute_aid'=>$attribute_aid,
						'shop_id'=>$sid,
					);
					$Shop_attributeModel->add($data);
				}
			}
		}	
		return true;
	}
	public function update(){
		if(!$this->create()) return FALSE;
			$this->save();
		$sid=Q('get.sid',0,'intval');
//		p($sid);exit;
		$Shop_detailedModel=new Shop_detailed();
		if(!$Shop_detailedModel->create()) return FALSE;
//			p($Shop_detailedModel->data);exit;
			$Shop_detailedModel->where("shop_sid={$sid}")->save();	
//		商品属性表	
		$Shop_attributeModel=new Shop_attribute();
		$Shop_attributeModel->where("shop_id={$sid}")->delete();
				//属性添加
		foreach (Q('post.attr') as $attribute_aid => $v) {
			if($v){
				$data = array(
					'shop_attributecol'=>$v,
					'attribute_aid'=>$attribute_aid,
					'shop_id'=>$sid
				);
				$Shop_attributeModel->add($data);
			}
		}
		//规格添加
		$spec = Q('post.spec');
		if($spec){
			$value = $spec['value'];
			foreach ($value as $attribute_aid => $v) {
				foreach ($v as $kk => $vv) {
					$data = array(
						'shop_attributecol'=>$vv,
						'attribute_aid'=>$attribute_aid,
						'shop_id'=>$sid,
					);
					$Shop_attributeModel->add($data);
				}
			}
		}	
		return true;	
	}
		//获得除了自己和自己的子集的分类数据
	public function getNoMy($cid){
//		获得自己子集的id
		$cids=$this->getSon($this->get(),$cid);
//		把自己的id压入数组
		$cids[]=$cid;
//		获得除了自己和自己子集的数据
//		条件where
		$where="cid NOT IN(".implode(',', $cids).")";
		$data=$this->where($where)->get();
		return $data;
	}
	public function getSon($data,$cid){
//		建个空数组接收子集id
//		$tmp=array();
		$tmp=[];
//		循环所有数据找子集id
		foreach($data as $v){
			if($v['pid']==$cid){
				$tmp[]=$v['cid'];
//				用递归合并数组
				$tmp=array_merge($tmp,$this->getSon($data,$v['cid']));
			}		
		}	
		return $tmp;
	}
}
